嗨~昨天我們已經有一個能跑起來的 TypeScript + Node.js 開發環境。接著,在正式開發 API 之前,先來點暖身 —— 建立一個清晰、可維護的專案架構,並完成環境變數與資料庫連線設定。這些基礎工具就是未來專案能否穩定推進的關鍵。
為了讓專案更有條理、方便後續維護,我們在 src 底下建立以下資料夾:
config:存放設定檔(例如資料庫連線設定)。controllers:處理 API 業務邏輯。entities:定義資料庫模型 (Entity)。middleware:存放中間件。routes:定義 API 路由。utils:常用工具函數。建立指令:
cd src
mkdir config controllers entities middleware routes utils
最終結構如下:
src/
  ├── config/
  ├── controllers/
  ├── entities/
  ├── middleware/
  ├── routes/
  ├── utils/
  └── app.ts
為什麼要用環境變數?
因為專案常常需要存放敏感資訊(像是資料庫密碼、API 金鑰),這些東西絕不能直接寫死在程式碼裡。
安裝套件與型別:
npm install dotenv
npm install @types/dotenv --save-dev
在專案根目錄建立 .env 檔案:
touch .env
在檔案內輸入:
DB_HOST=localhost
DB_NAME=db_name
DB_USERNAME=你的資料庫使用者
DB_PASSWORD=你的密碼
DB_PORT=5432
確認 .gitignore有下方配置:
.env
⚠️ .env 內含敏感資訊,務必避免上傳到 GitHub!
這裡我們會使用 PostgreSQL 搭配 TypeORM 作為 ORM 工具。
npm install typeorm pg
在 src/config 建立 db.ts:
import "reflect-metadata";
import { DataSource } from "typeorm";
import { Todo } from "../entities/Todo";
import dotenv from "dotenv";
dotenv.config();
export const AppDataSource = new DataSource({
  type: "postgres",
  host: process.env.DB_HOST,
  port: Number(process.env.DB_PORT),
  username: process.env.DB_USERNAME,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_NAME,
  entities: [Todo],
  synchronize: true, // 開發階段建議 true,正式環境請改成 false
  logging: true,
});
⚠️ synchronize: true 會自動產生 ORM 所對應的資料表,僅限開發階段使用;正式環境建議使用 migration!
在 TypeORM 裡,Entity 就是資料庫模型,負責定義表格結構。
新增檔案:
touch src/entities/Todo.ts
編輯內容:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
@Entity()
export class Todo {
  @PrimaryGeneratedColumn("uuid")
  id!: string;
  @Column()
  title!: string;
  @Column({ default: false })
  completed!: boolean;
}
確認 tsconfig.json,確保支援裝飾器:
"experimentalDecorators": true,
"emitDecoratorMetadata": true
💡 小技巧:
!表示該屬性必填。
👉 明天(Day 8)我們即將開始開發 API ,讓 TypeScript + Node.js 專案更豐富 🚀 !
git commit : setup backend structure and typeORM setting